// 组件: zj-selectDate 日期选择器 (底部弹出)
// https://developers.weixin.qq.com/miniprogram/dev/component/picker.html
// ==================== 参数 ====================
// ※ value ==> 当前值
// ※ model ==> 双向绑定时父组件的键名
// ※ start ==> 有效日期范围的开始, 格式为"YYYY-MM-DD" (默认: '1999-09-01')
// ※ end ==> 有效日期范围的结束, 格式为"YYYY-MM-DD" (默认: '2100-09-01')
// ※ fields ==> 选择器的粒度, year/month/day (默认: 'day')
// ※ placeholder ==> 提示文字 (默认: '请选择日期')
// ※ clearable ==> 是否可清除 (默认: true)
// ※ disabled ==> 是否禁用 (默认: false)
// ※ data ==> 数据, 仅做传递使用
// ※ error ==> 错误验证(提示信息字体变红, 清空当前值) (默认: false)
// ==================== 事件 ====================
// ※ bind:model="model(e)" ==> 双向绑定
// ※ bind:change="change(e)" ==> 选择器值改变时
// ※ bind:clear="clear(e)" ==> 清除事件
// ==================== 插槽 slot ====================
// ※ 默认插槽 ==> xxxxx
// ※ xxxxx ==> xxxxx
// ==================== 方法 ====================
// ※ xxxxx ==> xxxxx

const $app = getApp()
Component({
  properties: {
    value: { // 当前值
      type: String
    },
    start: { // 有效日期范围的开始, 格式为"YYYY-MM-DD"
      type: String,
      value: '1999-09-01'
    },
    end: { // 有效日期范围的结束, 格式为"YYYY-MM-DD"
      type: String,
      value: '2300-09-01'
    },
    fields: { // 选择器的粒度, year/month/day
      type: String,
      value: 'day'
    },
    placeholder: { // 提示文字
      type: String,
      value: '请选择日期'
    },
    clearable: { // 是否可清除
      type: Boolean,
      optionalTypes: [String, Number, Boolean],
      value: true
    },
    disabled: { // 是否禁用
      type: Boolean
    },
    model: { // 双向绑定时父组件的键名
      type: String
    },
    data: { // 数据, 仅做传递使用
      type: String, // 没用, 这个设定太弱智了
      optionalTypes: [String, Number, Boolean, Object, Array]
    },
    error: { // 错误验证
      type: Boolean,
      value: false
    }
  },
  data: {
    baseUrl: $app.baseUrl,
    iconData: $app.iconData || {},
    // ========== 判断 ==========
    judge_placeholderIsShow: false // placeholder是否显示
  },
  observers: {
    // ========== 监听'当前值', 判断placeholder是否显示 ==========
    'value': function (value) {
      const judge = Boolean(!value && value !== 0)
      this.setData({ judge_placeholderIsShow: judge })
    }
  },
  methods: {
    // ========== 选择器值改变时 ==========
    change (e) {
      this.triggerEvent('model', e)
      this.triggerEvent('change', e)
    },
    // ========== 取消点击事件 ==========
    cancel () {
      if (this.properties.clearable) this.clear()
    },
    // ========== 清除 ==========
    clear () {
      this.setData({ isFocus: true })
      const e = {
        currentTarget: { dataset: { model: this.properties.model } },
        detail: { value: '' }
      }
      this.triggerEvent('model', e)
      this.triggerEvent('clear', e)
      this.triggerEvent('change', e)
    }
  }
})
